package org.wdcode.back.helper;

import java.util.List;
import java.util.Map;

import org.wdcode.back.cache.UserCache;
import org.wdcode.back.po.Department;
import org.wdcode.back.po.User;
import org.wdcode.base.helper.BaseEntityCacheHelper;
import org.wdcode.base.util.Struts2Util;
import org.wdcode.common.codec.Crypto;
import org.wdcode.common.tools.Conversion;
import org.wdcode.common.tools.Lists;
import org.wdcode.web.params.WdWebParams;
import org.wdcode.web.util.AttributeUtil;

/**
 * 用户相关业务助手类 可操作缓存
 * @author WD
 * @since JDK6
 * @version 1.0 2009-11-23
 */
public final class UserHelper extends BaseEntityCacheHelper<UserCache, User> {
	// 用户助手
	private static UserHelper	helper;

	/**
	 * 获得登录用户 session中的user
	 * @return
	 */
	public User getUser() {
		return get(Conversion.toInt(AttributeUtil.get(Struts2Util.getRequest(), WdWebParams.getSaveUser())));
	}

	/**
	 * 获得公司下的所有员工
	 * @param compId 公司ID
	 * @return 公司下的所有员工
	 */
	public List<User> getByComp(int compId) {
		// 获得公司下的所有部门
		List<Department> lsDepa = DepartmentHelper.getHelper().getByComp(compId);
		// 获得所有用户
		Map<Integer, User> map = getCaches();
		// 声明列表保存用户
		List<User> list = Lists.getList();
		// 循环用户
		for (User user : map.values()) {
			// 循环部门
			for (Department depa : lsDepa) {
				// 判断是部门的人
				if (depa.getId() == user.getDepartmentId()) {
					// 添加到列表
					list.add(user);
					// 跳出循环
					break;
				}
			}
		}
		// 返回列表
		return list;
	}

	/**
	 * 返回加密的密码
	 * @param pwd 明文密码
	 * @return 加密密码
	 */
	public String getPassword(String password) {
		return Crypto.getPassword(password);
	}

	/**
	 * 实例化一个对象
	 */
	public User newInstance() {
		return new User();
	}

	/**
	 * 获得子类的Class
	 * @return 子类的Class
	 */
	public Class<User> getEntityClass() {
		return User.class;
	}

	/**
	 * 获得用户助手
	 * @return 用户助手
	 */
	public static UserHelper getHelper() {
		return helper;
	}

	/**
	 * 设置用户助手
	 * @param helper 用户助手
	 */
	public void setHelper(UserHelper helper) {
		UserHelper.helper = helper;
	}
}
